# -*- coding: utf-8 -*-
"""
BasePage使用示例
演示如何使用BasePage类进行自动化测试
"""

from playwright.sync_api import sync_playwright
from Common.basepage import BasePage


def demo_basepage_usage():
    """演示BasePage的基本用法"""
    
    with sync_playwright() as p:
        # 启动浏览器
        browser = p.chromium.launch(headless=False)
        page = browser.new_page()
        
        # 创建BasePage实例
        base_page = BasePage(page)
        
        # 1. 页面导航
        print("=== 页面导航示例 ===")
        base_page.goto("https://www.baidu.com")
        print(f"当前URL: {base_page.get_url()}")
        print(f"页面标题: {base_page.get_title()}")
        
        # 2. 元素操作示例
        print("\n=== 元素操作示例 ===")
        # 点击元素（带自动截图）
        if base_page.click_element("a[href='#']", img_desc="点击链接示例"):
            print("成功点击链接")
        
        # 输入文本（带自动截图）
        if base_page.fill_text("input[type='text']", "测试文本", img_desc="输入文本示例"):
            print("成功输入文本")
        
        # 获取元素文本
        text = base_page.get_text("h1")
        if text:
            print(f"获取到标题文本: {text}")
            
        # 演示失败自动截图（模拟找不到元素的情况）
        print("\n=== 失败自动截图演示 ===")
        if not base_page.click_element("#non-existing-element", img_desc="测试不存在元素"):
            print("点击不存在元素失败，已自动截图")
        
        # 3. 等待机制示例
        print("\n=== 等待机制示例 ===")
        if base_page.wait_for_element_visible("body"):
            print("页面body元素已可见")
        
        # 等待页面加载完成
        if base_page.wait_for_load_state("networkidle"):
            print("页面网络空闲状态已达到")
        
        # 4. 截图示例
        print("\n=== 截图示例 ===")
        # 使用新的截图方法
        screenshot_path = base_page.save_img("页面截图示例")
        if screenshot_path:
            print(f"成功截取页面截图: {screenshot_path}")
        
        # 传统截图方法
        if base_page.take_screenshot("demo_screenshot.png"):
            print("成功截取页面截图")
        
        # 5. JavaScript执行示例
        print("\n=== JavaScript执行示例 ===")
        result = base_page.execute_javascript("return document.title")
        if result:
            print(f"通过JS获取标题: {result}")
        
        # 滚动到页面底部
        if base_page.scroll_to_bottom():
            print("成功滚动到页面底部")
        
        # 6. 断言示例
        print("\n=== 断言示例 ===")
        if base_page.assert_element_visible("body"):
            print("断言通过：body元素可见")
        
        if base_page.assert_title_contains("Example"):
            print("断言通过：标题包含'Example'")
        
        # 7. Cookie操作示例
        print("\n=== Cookie操作示例 ===")
        cookies = base_page.get_cookies()
        print(f"当前cookies数量: {len(cookies)}")
        
        # 8. 本地存储示例
        print("\n=== 本地存储示例 ===")
        if base_page.set_local_storage("test_key", "test_value"):
            print("成功设置localStorage")
        
        value = base_page.get_local_storage("test_key")
        if value:
            print(f"获取localStorage值: {value}")
        
        # 关闭浏览器
        browser.close()
        print("\n测试完成！")


def demo_enhanced_features():
    """演示增强功能"""
    
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)
        page = browser.new_page()
        base_page = BasePage(page)
        
        print("=== 增强功能演示 ===")
        base_page.goto("https://example.com")
        
        # 1. 连续点击演示
        print("\n--- 连续点击演示 ---")
        if base_page.click_element_times("body", 3, img_desc="连续点击示例"):
            print("成功连续点击3次")
        
        # 2. 长按演示
        print("\n--- 长按演示 ---")
        if base_page.long_click_element("body", hold_time=2.0, img_desc="长按示例"):
            print("成功长按2秒")
        
        # 3. 等待并点击演示
        print("\n--- 等待并点击演示 ---")
        if base_page.wait_and_click("body", img_desc="等待点击示例"):
            print("成功等待并点击")
        
        # 4. 滚动并点击演示
        print("\n--- 滚动并点击演示 ---")
        if base_page.scroll_and_click("body", img_desc="滚动点击示例"):
            print("成功滚动并点击")
        
        # 5. 强制点击演示
        print("\n--- 强制点击演示 ---")
        if base_page.force_click("body", img_desc="强制点击示例"):
            print("成功强制点击")
        
        # 6. 根据文本点击演示
        print("\n--- 根据文本点击演示 ---")
        if base_page.click_by_text("Example", img_desc="文本点击示例"):
            print("成功根据文本点击")
        
        # 7. 元素截图演示
        print("\n--- 元素截图演示 ---")
        element_screenshot = base_page.save_img_with_selector("h1", "标题截图示例")
        if element_screenshot:
            print(f"成功截取元素截图: {element_screenshot}")
        
        browser.close()
        print("\n增强功能演示完成！")


def demo_form_operations():
    """演示表单操作"""
    
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)
        page = browser.new_page()
        base_page = BasePage(page)
        
        print("=== 表单操作示例 ===")
        
        # 这里可以替换为实际的表单页面
        base_page.goto("https://httpbin.org/forms/post")
        
        # 填写表单
        base_page.fill_text("input[name='custname']", "测试用户")
        base_page.fill_text("input[name='custtel']", "1234567890")
        base_page.fill_text("input[name='custemail']", "test@example.com")
        
        # 选择下拉选项
        base_page.select_option("select[name='size']", "large")
        
        # 选择单选按钮
        base_page.click_element("input[value='bacon']")
        
        # 选择复选框
        base_page.check_checkbox("input[value='mushrooms']")
        
        # 提交表单
        base_page.click_element("input[type='submit']")
        
        # 等待页面跳转
        base_page.wait_for_load_state("networkidle")
        
        print("表单提交完成")
        browser.close()


if __name__ == "__main__":
    print("BasePage功能演示开始...")
    demo_basepage_usage()
    print("\n" + "="*50)
    demo_enhanced_features()
    print("\n" + "="*50)
    demo_form_operations()
